#ifndef LUCNX_INTERRUPT_H
#define LUCNX_INTERRUPT_H

#include <Lucnx/types.h>

#define NR_HANDLERS 0x81

typedef struct interrupt_frame_t
{
    u32 vector;
    u32 edi;
    u32 esi;
    u32 ebp;
    u32 esp_dummy;
    u32 ebx;
    u32 edx;
    u32 ecx;
    u32 eax;
    u32 gs; // 16 位寄存器占用 32 位的空间
    u32 fs;
    u32 es;
    u32 ds;
    u32 vector0;
    u32 magic;
    void *eip;
    u32 cs;
    u32 eflags;
    u32 esp;
    u32 ss;
}interrupt_frame_t;

void register_handler(int vector, void * handler);

void set_pic_irq(u8 vector, bool state);

bool set_interrupt_state(bool state);
bool get_interrupt_state();

#endif